/**
*实验三 - 用顺序表实现电话簿
*学号： 201531002134
*班级： 软工1601
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define LENGTH 10

//电话簿信息结构体类型
typedef struct people
{
	char name[9];
	char tel[12];
}people;

//定义顺序类型sqlist
typedef struct
{
	people *peo;
	int length;  //已经占用的数据长度
	int listsize;  //顺序表的总长度
}sqlist;

int initList(sqlist &sl);	//顺序表初始化
int createList(sqlist &sl);		//顺序表建立
int insertList(sqlist &sl, people elem , int pos);   //顺序表插入操作,pos为位置
int delListByPos(sqlist &sl , int pos);   // 顺序表按位置删除操作
int createPeople(people &peo);   //创建一个用户


int initList(sqlist &sl)
{
	sl.peo = (people *)malloc(LENGTH*sizeof(people));
	if (!sl.peo)
	{
		return 0;
	}
	else
	{
		sl.length = 0;
		sl.listsize = LENGTH;
		return 1;
	}
}

// 创建顺序表
int createList(sqlist &sl)
{
	sl.length = 0;
	int no;
	printf("请输入你一共要创建多少组用户数据？\n");
	scanf("%d",&no);
	for (int i=0; i<no; i++ , sl.length++)
	{
		printf("请输入第%d组用户的姓名：",i+1);
		scanf("%s",&sl.peo[i].name);
		printf("请输入第%d组用户的电话：",i+1);
		scanf("%s",&sl.peo[i].tel);
	}
	printf("本次您一共输入了%d组用户信息, 链表长度%d\n",no,sl.length);
	return 1;
}

// 在指定位置插入数据
int insertList(sqlist &sl, people elem , int pos)
{
	int lth = sl.length +1;
	if (pos<1 || pos > lth)
	{
		printf("您要输入的位置不存在，请检查！\n");
		return 0;
	}
	for (int i = lth-pos; i>0; i--)
	{

		strcpy(sl.peo[i+1].name , sl.peo[i].name);
		strcpy(sl.peo[i+1].tel ,sl.peo[i].tel);
	}
	strcpy(sl.peo[pos-1].name , elem.name);
	strcpy(sl.peo[pos-1].tel , elem.tel);
	sl.length++;
	return 1;

}

// 删除指定位置的数据
int delListByPos(sqlist &sl , int pos)
{
	if (pos<1 || pos > sl.length)
	{
		printf("您要输入的位置不存在，请检查！\n");
		return 0;
	}
	for (int i = 0; i<sl.length-pos; i++)
	{
		strcpy(sl.peo[pos+i-1].name, sl.peo[pos+i].name);
		strcpy(sl.peo[pos+i-1].tel , sl.peo[pos+i].tel);
	}
	sl.length-=1;
	return 1;

}

int createPeople(people &peo)
{
    printf("请输入用户姓名:");
    scanf("%s",&peo.name);
    printf("请输入用户电话:");
    scanf("%s",&peo.tel);
    return 1;
}

int outList(sqlist sl)
{
	for (int i=0;i< sl.length;i++)
	{
		printf("第%d个用户",i+1);
		printf("姓名：%s\n",sl.peo[i].name);
		printf("电话：%s\n",sl.peo[i].tel);
	}
	printf("\n");
	return 1;
}

void menu()
{
    printf("***************************菜单****************************\n");
    printf("\t\t 1.创建一个电话簿\n");
    printf("\t\t 2.在第二个位置插入一组数据\n");
    printf("\t\t 3.删除第二个位置的数据\n");
    printf("\t\t 0.退出\n");
    printf("***********************************************************\n");
}

int main()
{
    menu();
    int i,pos;
    sqlist list;
    while (1)
    {
        printf("请输入选项：");
        scanf("%d",&i);
        switch (i)
        {
        case 1:
            initList(list);
            createList(list);
            outList(list);
            break;
        case 2:
            people one;
            createPeople(one);
            printf("请输入你想插入的位置");
            scanf("%d",&pos);
            insertList(list, one , pos);
            outList(list);
            break;
        case 3:
            printf("请输入你想删除的位置");
            scanf("%d",&pos);
            delListByPos(list,pos);
            outList(list);


        }
    }

	return 0;
}
